package day02;
//数据类型的演示
public class DataTypeDemo {
    public static void main(String[] args) {
        //类型间的转换，由小到大是自动类型转换，由大到小是强制类型转换
        int a = 5;
        long b = a;//自动/隐式类型转换
        int c = (int)b;//强制类型转换

        long d = 5;//自动类型转换
        double e = 5;//自动类型转换
        System.out.println(e);//5.0

        long f = 10000000000L;
        int g = (int)f;
        System.out.println(g);//1410065408,强转有可能发生溢出

        double h = 25.789;
        int i = (int)h;
        System.out.println(i);//25，强转有可能丢失精度

        //1）整数直接量可以直接赋值给byte,short,char,但不能超出范围
        //2）byte,short,char型数据参与运算时，系统一律将其转换为int再运算
        byte b1 = 5;
        byte b2 = 6;
        byte b3 =(byte)(b1+b2);
        System.out.println(2+2);//4
        System.out.println(2+'2');//52,2加上'2'的码50
        System.out.println('2'+'2');//100，'2'的码50，加上'2'的码50
        System.out.println('2');//2,未参与运算

        int aa = '我';//看对应的码
        System.out.println(aa);//'我'的码
        char bb = 65;//看码对应的字符
        char cc = 97;
        char dd = 48;
        System.out.println(bb);//A
        System.out.println(cc);//a
        System.out.println(dd);//0


        /*
        //5)char字符型，2个字节
        char c1 = '女';//字符女
        char c2 = 'n';//字符n
        char c3 = '_';//字符_
        char c4 = '6';//字符6
        char c5 = 'g';//字符g
        char c6 = ' ';//字符空格符
        //char c7 = 女；//编译错误，字符直接量必须放在单引号里
        //char c8 = '';//编译错误，必须有字符
        //char c9 = '10';//编译错误，只能装1个字符

        char c10 = 65;//0到65535之间
        System.out.println(c10);//'A',printin()时会根据c8的类型来输出
                                //若c8为char类型，则以字符形式展示
                                //若c8为int类型，则以数字形式展示
        char c11 = '\'';
        System.out.println(c11);
        char c12 = '\\';
        System.out.println(c12);

         */

        /*
        //4)boolean:布尔型，1个字节
        boolean a = true;//true为布尔型直接量
        boolean b = false;//false为布尔型直接量
        //boolean c = 25.6;//编译错误，布尔型只能存储true和false

         */

        /*
        //3)double:浮点型，8个字节，范围很大很大很大
        double a = 25.678;//25.678为小数直接量，默认为double类型
        float b = 25.678F;//25.678为float型直接量

        double c = 8.1,d = 11;
        System.out.println(d-c);//2.9000000000000004发生舍入误差了

         */

        /*
        long a = 25L;//25L为长整型直接量
        //long b = 10000000000;//编译错误，100亿默认为int类型，但超出int范围
        long c = 10000000000L;//100亿L为长整型直接量
        long d = 365L*24*60*60*1000;//去年一年所经历的毫秒数
        System.out.println(d);//31536000000

        long e = 1000000000*2*10L;
        System.out.println(e);//200亿
        long f = 1000000000*3*10L;
        System.out.println(f);//不是300亿
        long g = 1000000000L*3*10;
        System.out.println(g);//300亿
         */

        /*
        //int:整型，4个字节，-21个多亿到21个多亿
        int a = 250;//250为整数直接量，默认为int类型
        //int b = 10000000000；//编译错误，100亿默认为int类型，但超出范围了
        //int c = 25.678;//编译错误，整型变量中只能装整数
        System.out.println(5/2);//2
        System.out.println(2/5);//0
        System.out.println(5.0/2);//2.5
        System.out.println(5/2.0);//2.5
        int d = 2147483647;//int的最大值
        d = d+1;
        System.out.println(d);//-2147483648,发生溢出了
         */
    }
}
